home *** CD-ROM | disk | FTP | other *** search
/ The Programmer Disk / The Programmer Disk (Microforum).iso / xpro / c4 / pro20 / pbmplus.h < prev    next >
C/C++ Source or Header  |  1990-05-31  |  4KB  |  109 lines

  1. /* pbmplus.h - header file for PBM, PGM, PPM, and PNM
  2. */
  3.  
  4. #ifndef _PBMPLUS_H_
  5. #define _PBMPLUS_H_
  6.  
  7. #if ! ( defined(BSD) || defined(SYSV) )
  8. /* CONFIGURE: If your system is >= 4.2BSD, set the BSD option; if you're a
  9. ** System V site, set the SYSV option.  If you're an ANSI C site, you're
  10. ** probably better off setting SYSV.  This mostly has to do with string
  11. ** functions.
  12. */
  13. #define BSD
  14. /* #define SYSV */
  15. #endif
  16.  
  17. /* CONFIGURE: If you want to enable writing "raw" files, set this option.
  18. ** "Raw" files are smaller, and much faster to read and write, but you
  19. ** must have a filesystem that allows all 256 ASCII characters to be read
  20. ** and written.  Also, you will no longer be able to mail P?M files without 
  21. ** using uuencode or the equivalent.  Note that reading "raw" files works
  22. ** whether writing is enabled or not.
  23. */
  24. #define PBMPLUS_RAWBITS
  25.  
  26. /* CONFIGURE: On some systems, the putc() macro is broken and will return
  27. ** EOF when you write out a 255.  For example, ULTRIX does this.  This
  28. ** only matters if you have defined RAWBITS.  To test whether your system
  29. ** is broken this way, go ahead and compile things with RAWBITS defined,
  30. ** and then try "pbmmake -b 8 1 > file".  If it works, fine.  If not,
  31. ** define BROKENPUTC1 and try again - if that works, good.  Otherwise,
  32. ** BROKENPUTC2 is guaranteed to work, although it's 1.9 times slower.
  33. */
  34. /* #define PBMPLUS_BROKENPUTC1 */
  35. /* #define PBMPLUS_BROKENPUTC2 */
  36.  
  37. #ifdef PBMPLUS_BROKENPUTC1
  38. #undef putc
  39. /* This is a fixed version of putc() that should work on most Unix systems. */
  40. #define putc(x,p) (--(p)->_cnt>=0? ((int)(unsigned char)(*(p)->_ptr++=(unsigned char)(x))) : _flsbuf((unsigned char)(x),p))
  41. #endif /*PBMPLUS_BROKENPUTC1*/
  42. #ifdef PBMPLUS_BROKENPUTC2
  43. #undef putc
  44. /* For this one, putc() becomes a function, defined in pbm/libpbm1.c. */
  45. #endif /*PBMPLUS_BROKENPUTC2*/
  46.  
  47. /* CONFIGURE: PGM can store gray values as either bytes or shorts.  For most
  48. ** applications, bytes will be big enough, and the memory savings can be
  49. ** substantial.  However, if you need more than 8 bits of resolution, then
  50. ** define this symbol.
  51. **
  52. ** If you are not making PGM, you can ignore this.
  53. */
  54. /* #define PGM_BIGGRAYS */
  55.  
  56. /* CONFIGURE: Normally, PPM handles a pixel as a struct of three grays.
  57. ** It can also be configured to pack the three values into a single longword,
  58. ** 10 bits each.  If you have configured PGM with the PGM_BIGGRAYS option
  59. ** (store grays as shorts), AND you don't need more than 10 bits for each
  60. ** color component, AND you care more about memory use than speed, then
  61. ** this option might be a win.  Under these circumstances it will make
  62. ** some of the programs use 1.5 times less space,  but all of the programs
  63. ** will run about 1.4 times slower.
  64. **
  65. ** If you are not using PGM_BIGGRAYS, then this option is useless -- it
  66. ** doesn't save any space, but it still slows things down.
  67. **
  68. ** If you are not making PPM, you can ignore this.
  69. */
  70. /* #define PPM_PACKCOLORS */
  71.  
  72. /* CONFIGURE: uncomment this to enable debugging checks. */
  73. /* #define DEBUG */
  74.  
  75. /* End of configurable definitions. */
  76.  
  77. /* Variable-sized arrays definitions. */
  78.  
  79. char **pm_allocarray( /* int cols, int rows, size */ );
  80. char *pm_allocrow( /* int cols, size */);
  81. void pm_freearray( /* char **its, int rows */ );
  82. void pm_freerow( /* char *itrow */ );
  83.  
  84. /* Error handling definitions. */
  85.  
  86. extern char *pm_progname;    /* every main() must assign argv[0] to this */
  87. void pm_message( /* char *fmt, arg, arg, arg, arg, arg */ );
  88. void pm_error( /* char *fmt, arg, arg, arg, arg, arg */ ); /* doesn't return */
  89. void pm_perror( /* char *reason */ );            /* doesn't return */
  90. void pm_usage( /* char *usage */ );            /* doesn't return */
  91.  
  92. /* File open/close that handles "-" as stdin and checks errors. */
  93.  
  94. FILE *pm_openr( /* char *name */ );
  95. void pm_close( /* FILE *f */ );
  96.  
  97. /* Endian I/O. */
  98.  
  99. int pm_readbigshort( /* FILE *in, short *sP */ );
  100. int pm_writebigshort( /* FILE *out, short s */ );
  101. int pm_readbiglong( /* FILE *in, long *lP */ );
  102. int pm_writebiglong( /* FILE *out, long l */ );
  103. int pm_readlittleshort( /* FILE *in, short *sP */ );
  104. int pm_writelittleshort( /* FILE *out, short s */ );
  105. int pm_readlittlelong( /* FILE *in, long *lP */ );
  106. int pm_writelittlelong( /* FILE *out, long l */ );
  107.  
  108. #endif /*_PBMPLUS_H_*/
  109.